package com.kingyun.gpsinspection.purificationservice.facade.service.jsm;

import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.Employee;
import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.Organization;
import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.Ztree;

import java.util.List;

/**
 * @version V1.0
 * @Description: ${TODO}(对外组织机构接口)
 * @author: YuPeng
 * @date: 2016/11/16,0016
 */
public interface OutOrganizationService {
    /**
     * 查询组织树
     *
     * @return
     * @throws Exception
     */
    List<Ztree> queryOrgTree(Organization organization) throws Exception;

    /**
     * @param orgId
     * @return 单个组织数据返回
     * 备注：根据组织Id 查询组织信息
     */
    Organization queryOrganization(String orgId) throws Exception;


    /**
     * 查询组织机构子节点S
     *
     * @param parentid
     * @return
     * @throws Exception
     */
    List<Organization> queryNodeByParentId(String parentid) throws Exception;

    /**
     * @param employee 人员信息数据组合 ； 人员Id 必填
     * @param maxLevel  最大组织层级
     * @param lessLevel 最小组织层级
     */
    List<Organization> getOrganizationList(Employee employee, String maxLevel, String lessLevel) throws Exception ;

    /**
     * 加载组织和部门混合树
     * @param orgId
     * @param sync
     * @param openOrg
     * @param openDept
     * @param keyword
     * @return
     * @throws Exception
     */
    List<Ztree> loadOrgDeptZtree(String orgId, boolean sync, boolean openOrg, boolean openDept, String keyword) throws Exception ;

    /**
     * 获取指定组织下的所有后代组织、后代部门、后代人员的混合树
     * @param orgId
     * @return
     */
    List<Ztree> getOrgDeptMixedZtreeByOrgId(String orgId)  throws Exception ;

    /**
     * 组织和部门混合树混合树的设置组织的ztree的isParent
     * @param ztree
     * @param orgId
     * @throws Exception
     */
    void setOrgZtreeIsParent(Ztree ztree, String orgId) throws Exception;

    /**
     * 组织和部门混合树混合树的设置部门的ztree的isParent
     * @param ztree
     * @param orgId
     * @throws Exception
     */
    void setDepZtreeIsParent(Ztree ztree, String orgId) throws Exception;

    /**
     * @param employee 人员信息数据组合 ；
     * 根据人员信息，查询到人员的所有的作业区 ， 如果是分公司 或者 如果是
     */
    List<Organization> getOrganizationList(Employee employee) throws Exception ;


    /**
     * @param organizationList
     * @return 将组织转换成树
     */
    List<Ztree> offsetZtree(List<Organization> organizationList) throws Exception ;

    /**
     * 根据当前登录的组织id（所属组织是作业区及以下时，返回作业区；所属组织是作业区以上时返回本身）
     * @param userId
     * @return
     */
    String getUserOrgId(String userId) throws Exception;

}
